package com.example.tdam_2012_g3;

import Adaptadores.AdaptadorListaContactos;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import entidades.ContactoAndroid;

public class MainActivity extends ListActivity {

	//private static final int DIALOG_CONTACT_INFO = 0;
	private AdaptadorListaContactos adaptador;
	private EditText txtFiltrar;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		adaptador = new AdaptadorListaContactos(this);
		this.cargarListaContactos();
		adaptador.mantenerLista();
		setListAdapter(adaptador);
		txtFiltrar = (EditText) findViewById(R.id.edtFiltrar);
		txtFiltrar.addTextChangedListener(new TextWatcher() {

			public void afterTextChanged(Editable arg0) {
				// TODO Auto-generated method stub
			}

			public void beforeTextChanged(CharSequence arg0, int arg1,
					int arg2, int arg3) {
				// TODO Auto-generated method stub
			}

			public void onTextChanged(CharSequence s, int arg1, int arg2,
					int arg3) {
				adaptador.getFilter().filter(s.toString());
			}
		});
	}
/**
 * redefinimos el metodo onResume para que refleje el orden seleccionado en las preference screen
 */
	public void onResume() {
		super.onResume();
		this.ordernarContactos();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle item selection
		switch (item.getItemId()) {
		case R.id.menu_settings:
			startActivity(new Intent(MainActivity.this,
					ActivityPreferenciaContacto.class)); // se va a cambiar, volver a
													// preferenciaContacto.class
			return true;

		case R.id.log_acciones:
			startActivity(new Intent(MainActivity.this, ActivityLog.class));
			return true;
		case R.id.historialMensajes:
			startActivity(new Intent(MainActivity.this,
					Activity_Historial_Sms.class));
			return true;
		case R.id.menu_principal_registro_conectividad:
			startActivity(new Intent(MainActivity.this,Activity_Log_Conectividad.class));
			return true;
		case R.id.mnu_registro_servidor:
			startActivity(new Intent(MainActivity.this,Activity_Nombre_Usuario.class));
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}

	/**
	 * Metodo que carga todos los contactos del telefono a traves del content provider correspondiente
	 * llama a cargarTeleofonoContacto y cargarEmailsContacto para cargarlos respectivamente
	  
	 */
	public void cargarListaContactos() {

		ContentResolver cr = this.getContentResolver();
		Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, null);
		ContactoAndroid contacto = null;
		adaptador.limpiar();
		if (cur.getCount() > 0) {
			while (cur.moveToNext()) {
				String idContacto = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
				String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
				if (name != null) {
					contacto = new ContactoAndroid();
					contacto.setNombre(name);
					contacto.setId(idContacto);
				
					adaptador.agregarContacto(contacto);
				}
			}
		}
		cur.close();
		adaptador.notifyDataSetChanged();
	}
	
	

	/**
	 * Metodo que ordena la lista de contactos de acuerdo a la preferencia seteada
	 * por defecto el orden es ascendente
	 */
	public void ordernarContactos() {
		SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
		boolean ascendente = myPreference.getBoolean("ordenAscendente", true);
		adaptador.sortContactos(ascendente);
		adaptador.notifyDataSetChanged();
	}


}
